# ---
# title: 1006. Clumsy Factorial
# id: problem1006
# author: Indigo
# date: 2021-01-31
# difficulty: Medium
# categories: Math
# link: <https://leetcode.com/problems/clumsy-factorial/description/>
# hidden: true
# ---
# 
# Normally, the factorial of a positive integer `n` is the product of all
# positive integers less than or equal to `n`.  For example, `factorial(10) = 10
# * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1`.
# 
# We instead make a _clumsy factorial:_  using the integers in decreasing order,
# we swap out the multiply operations for a fixed rotation of operations:
# multiply (*), divide (/), add (+) and subtract (-) in this order.
# 
# For example, `clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1`.  However,
# these operations are still applied using the usual order of operations of
# arithmetic: we do all multiplication and division steps before any addition or
# subtraction steps, and multiplication and division steps are processed left to
# right.
# 
# Additionally, the division that we use is _floor division_  such that `10 * 9
# / 8` equals `11`.  This guarantees the result is an integer.
# 
# `Implement the clumsy` function as defined above: given an integer `N`, it
# returns the clumsy factorial of `N`.
# 
# 
# 
# **Example 1:**
# 
#     
#     
#     Input: 4
#     Output:  7
#     Explanation: 7 = 4 * 3 / 2 + 1
#     
# 
# **Example 2:**
# 
#     
#     
#     Input: 10
#     Output: 12
#     Explanation: 12 = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1
#     
# 
# 
# 
# **Note:**
# 
#   1. `1 <= N <= 10000`
#   2. `-2^31 <= answer <= 2^31 - 1`  (The answer is guaranteed to fit within a 32-bit integer.)
# 
# 
## @lc code=start
using LeetCode

function clumsy(N::Int)
    if N <= 4
        return [1, 2, 6, 7][N]
    end
    mod = 1 + (N & 3)
    return N + [1, 2, 2, -1][mod]
end
## @lc code=end
